'''
cn_sequence:自定义模块，提供一些组合排序，组合筛选等方法
'''
from collections import OrderedDict

__all__=["dic_sorted","select_num","recurrence"] #定义静态变量，代表该模块提供的公共接口

def dic_sorted(dic,dic_result):
    '''
    实现字典排序
    dic:输入参数，待排序的字典
    dic_result:输入参数，排序的字典
    '''
    dic_copy=dic.copy()
    keys=list(dic_copy.keys())
    len_keys=len(keys)-1
    for key_A in keys:
        temp_value=dic_copy[key_A]
        temp_key=key_A
        tempkeys=keys.copy()
        tempkeys.remove(key_A)
        for key_B in tempkeys:
            if (temp_value<dic[key_B]):
                continue
            else:
                temp_value=dic_copy[key_B]
                temp_key=key_B
        dic_result[temp_key]=temp_value
        dic_copy.pop(temp_key)
        keys.remove(temp_key)
    if len(keys)>1:
        dic_sorted(dic_copy,dic_result)
    else:
        dic_result[key_A]=dic[key_A]

def select_num(m,n):
    '''
    # 方法实现：从一个有m个items的列表中选出n个items的可能组合数量
    m:待筛选的成员总数，正整数
    n:筛选的组合
    return:返回筛选的组合结果
    '''
    factorial_m=recurrence(m)  #公式sel_count=m!/n!*(m-n)!
    factorial_n=recurrence(n)
    factorial_mn=recurrence(m-n)
    sel_count=factorial_m//(factorial_n*factorial_mn)
    return sel_count
    
def recurrence(L):
    '''
    L:参数输入,即计算L的阶乘 L!
    返回值为L阶乘的结果
    '''
    result=1 
    if L>1:
        result=L*(recurrence(L-1))
    else:   
        result=1
    return result

def main():
    '''
    模块测试方法
    '''
    dic_test={1:13,2:15,5:13,4:13,3:15}
    dic_result=OrderedDict()
    dic_sorted(dic_test,dic_result)
    print(dic_result)

if __name__=="__main__":
    main()
